﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using Csla;
using Csla.Serialization;
using log4net;

namespace Sireass.Bl
{
	[Serializable]
	public class ProgramaInfo: ReadOnlyBase<ProgramaInfo>
	{
		#region Propiedades
		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

		public static readonly PropertyInfo<long> IdProgramaProperty = RegisterProperty<long>(c => c.IdPrograma);
		public long IdPrograma
		{
			get { return GetProperty(IdProgramaProperty); }
			private set { LoadProperty(IdProgramaProperty, value); }
		}

		public static readonly PropertyInfo<string> ClaveProgramaProperty = RegisterProperty<string>(c => c.ClavePrograma);
		[Display(Name = "Clave Programa")]
		public string ClavePrograma
		{
			get { return GetProperty(ClaveProgramaProperty); }
			private set { LoadProperty(ClaveProgramaProperty, value); }
		}

		public static readonly PropertyInfo<string> ProgramaProperty = RegisterProperty<string>(c => c.Programa);
		[Display(Name = "Programa")]
		public string Programa
		{
			get { return GetProperty(ProgramaProperty); }
			private set { LoadProperty(ProgramaProperty, value); }
		}

		public static readonly PropertyInfo<long> IdEscuelaProperty = RegisterProperty<long>(c => c.IdEscuela);
		[Display(Name = "Id Escuela")]
		public long IdEscuela
		{
			get { return GetProperty(IdEscuelaProperty); }
			private set { LoadProperty(IdEscuelaProperty, value); }
		}

		public static readonly PropertyInfo<DateTime> FechaInicioVigenciaProperty = RegisterProperty<DateTime>(c => c.FechaInicioVigencia);
		[Display(Name = "Fecha Inicio Vigencia")]
		public DateTime FechaInicioVigencia
		{
			get { return GetProperty(FechaInicioVigenciaProperty); }
			private set { LoadProperty(FechaInicioVigenciaProperty, value); }
		}

		public static readonly PropertyInfo<DateTime> FechaFinVigenciaProperty = RegisterProperty<DateTime>(c => c.FechaFinVigencia);
		[Display(Name = "Fecha Fin Vigencia")]
		public DateTime FechaFinVigencia
		{
			get { return GetProperty(FechaFinVigenciaProperty); }
			private set { LoadProperty(FechaFinVigenciaProperty, value); }
		}

		public static readonly PropertyInfo<bool> HabilitadoProperty = RegisterProperty<bool>(c => c.Habilitado);
		[Display(Name = "Habilitado")]
		public bool Habilitado
		{
			get { return GetProperty(HabilitadoProperty); }
			private set { LoadProperty(HabilitadoProperty, value); }
		}
		#endregion
        #region Factory
        public static ProgramaInfo GetProgramaInfo(ProgramaCriteria criteria)
        {
            return DataPortal.Fetch<ProgramaInfo>(criteria);
        }
        #endregion
		#region Data Portal
		private void Child_Fetch(System.Data.IDataReader data)
		{
			var safeData = new Csla.Data.SafeDataReader(data);
			IdPrograma = safeData.GetInt64("nId_Programa");
			ClavePrograma = safeData.GetString("cClave_Programa");
			Programa = safeData.GetString("cPrograma");
			IdEscuela = safeData.GetInt64("nId_Escuela");
			FechaInicioVigencia = safeData.GetDateTime("dFecha_Inicio_Vigencia");
			FechaFinVigencia = safeData.GetDateTime("dFechaFin_Vigencia");
			Habilitado = safeData.GetBoolean("bHabilitado");
		}

        private void DataPortal_Fetch(ProgramaCriteria criteria)
        {
            using (var dalManager = Sireass.Dal.DalFactory.GetManager())
            {
                var dal = dalManager.GetProvider<Sireass.Dal.IProgramaDal>();
                using (var safeData = new Csla.Data.SafeDataReader(
                                    dal.Fetch(criteria.IdPrograma, criteria.IdEscuela)))
                {
                    if (safeData.Read())
                    {
                        IdPrograma = safeData.GetInt64("nId_Programa");
                        ClavePrograma = safeData.GetString("cClave_Programa");
                        Programa = safeData.GetString("cPrograma");
                        IdEscuela = safeData.GetInt64("nId_Escuela");
                        FechaInicioVigencia = safeData.GetDateTime("dFecha_Inicio_Vigencia");
                        FechaFinVigencia = safeData.GetDateTime("dFechaFin_Vigencia");
                        Habilitado = safeData.GetBoolean("bHabilitado");
                    }
                }
            }
        }
		#endregion
	}
}
